package com.atguigu.lease.admin.controller.apartment;

import com.atguigu.lease.admin.service.PaymentTypeService;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.bean.PaymentType;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
 * @RestController注解：标记为RESTful控制器，所有方法返回值默认使用JSON格式
 * @RequestMapping("/admin/payment")：设置控制器的基础路径为/admin/payment
 * @Tag(name = "支付方式管理模块")：Swagger/OpenAPI文档的分组标签
 */
@RestController
@RequestMapping("/admin/payment")
@Tag(name = "支付方式管理模块")
public class PaymentInfoController {
    /*
    @Autowired注解：自动注入PaymentTypeService服务层实例
    用于处理支付方式相关的业务逻辑
    */
    @Autowired
    PaymentTypeService paymentTypeService;

    /*
     * @GetMapping("/list")：处理GET请求，路径为/admin/payment/list
     * @Operation(summary = "1,查询所有支付方式的接口")：Swagger接口描述
     * 功能：查询系统中所有可用的支付方式
     */
    @GetMapping("/list")
    @Operation(summary = "1,查询所有支付方式的接口")
    public Result<List<PaymentType>> list() {
        // 调用服务层获取所有支付方式列表
        return Result.ok(paymentTypeService.list());
    }


    // /admin/payment/saveOrUpdate
    @PostMapping("/saveOrUpdate")
    @Operation(summary = "2,更新与修改支付方式")
    public Result saveOrUpdate(@RequestBody PaymentType paymentType) {
        // 调用服务层保存或更新操作
        return Result.ok(paymentTypeService.saveOrUpdate(paymentType));
    }

    /*
     * @Parameter(...)：Swagger参数描述
     * @RequestParam("id") Long id：接收URL查询参数id
     * 功能：根据ID删除指定的支付方式
     */
    // /admin/payment/deleteById?id=14
    @DeleteMapping("/deleteById")
    @Operation(summary = "3,根据id删除支付方式")
    public Result deleteById(
            //Knife4j的API文档注解 ->@Parameter
            @Parameter(description = "主键值", in = ParameterIn.QUERY, required = true)
            @RequestParam("id") Long id) {
        // 调用服务层根据ID删除记录
        return Result.ok(paymentTypeService.removeById(id));
    }


    /*
     * @GetMapping("/page/{pageNum}/{pageSize}")：处理GET请求，路径包含页码和页大小参数
     * @Operation(summary = "查询支付方式分页数据")：Swagger接口描述
     * @Parameter(...)：Swagger路径参数描述
     * @PathVariable("pageNum")：从URL路径中获取pageNum参数
     * @PathVariable("pageSize")：从URL路径中获取pageSize参数
     * 功能：分页查询支付方式数据
     */
    @GetMapping("/page/{pageNum}/{pageSize}")
    @Operation(summary = "4,查询支付方式分页数据")
    public Result<Page<PaymentType>> page(
            @Parameter(description = "页码", in = ParameterIn.PATH)
            @PathVariable("pageNum") long pageNum,

            @Parameter(description = "每页记录数", in = ParameterIn.PATH)
            @PathVariable("pageSize") long pageSize
    ) {
        // 创建分页对象并调用服务层查询分页数据
        return Result.ok(paymentTypeService.page(new Page<PaymentType>(pageNum, pageSize)));
    }
}

